home *** CD-ROM | disk | FTP | other *** search
- unit Dbctrl;
-
- interface
-
- uses
- DB,
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, DBTables, Grids;
-
-
- type
- TbuildResultType = (success, NotValidDD, DBerror);
-
-
- type
- TDictCtrlForm = class(TForm)
- DBSG: TStringGrid;
- private
- { Private declarations }
- public
- tableList : Tstrings;
- function FillTableDef(qry : tquery; tbl : string): tbuildResultType;
- { Public declarations }
- end;
-
- var
- DictCtrlForm: TDictCtrlForm;
-
- function setFieldDef(var tableToDefine : Ttable; const WhichTable, WhichField : string): boolean;
-
- implementation
-
- const
- {indexes into dbDefineStringGrid.cols}
- tablename = 0; {string 20}
- tabletype = 1; {string 20}
- fieldname = 2; {string[20];}
- tag = 3; {string 20 tfield.tag}
- scrprompt = 4; {string[40]; {tfield.DisplayName}
- scrformat = 5; {string[80]; {tfield.DisplayText -- an editmask}
- grdprompt = 6; {string[10];}
- grdwidth = 7; {smallint {tfield.DisplayWidth}
- fldtype = 8; {string[1]; {FieldTypeLtr}
- fldlen = 9; {smallint {tfield.size}
- flddec = 10; {smallint}
- fldidx = 11; {boolean;}
- idxexp = 12; {string;}
- tab_order = 13; {integer;}
- isrequired = 14; {boolean; {tfield.required}
- defaultis = 15; {string[80];}
- editmaskis = 16; {string[80]; {tfield.editMask}
- minval = 17; {ftfloat tfield.minvalue}
- maxval = 18; {ftfloat tfield.maxvalue}
- vallist = 19; {ftmemo list of valid strings}
- { define documentation only
- validvalue documentation only
- notes documentation only}
- hintTxt = 20; {string 120}
- helpid = 21; {longint;}
- {help, memo only used if helpid not null or 0}
- haslink = 22; {boolean;}
- srclinktbl = 23; {string[20];}
- srclinkfld = 24; {string[20];}
- iscalc = 25; {boolean;}
- formula = 26; {memo only used if iscalc true}
-
- {$R *.DFM}
-
- {
- ThisField := TstringField.Create(Self);
- ThisField.FieldName := whichfield;
- ThisField.Name := whichTable.Name + ThisField.FieldName;
- ThisField.Index := whichTable.FieldCount;
- ThisField.DataSet := whichTable;}
-
-
- function setFieldDef(var tableToDefine : Ttable; const WhichTable, WhichField : string): boolean;
- var
- foundit : boolean;
- tablenum,
- start_row, end_row, cur_row : integer;
- begin
- with DictCtrlForm do begin
- Result := false;
- foundit := false;
- {Is table loaded?}
- for tablenum := 0 to DBSG.ColCount - 1 do
- if DBSG.cols[0].strings[tablenum] = whichTable
- then begin foundit := true; start_row := tablenum; break; end;
- {done looking for table name}
- if not foundit
- then exit {returns false}
- else begin
- for tablenum := start_row to DBSG.ColCount - 1 do
- if DBSG.cols[0].strings[tablenum] <> whichTable
- then begin end_row := tablenum; break; end;
- end;
- foundit := false;
- for cur_row := start_row to end_row do
- if DBSG.cells[fieldname,cur_row] = whichField
- then begin foundit := true; break; end;
- if foundit
- then begin
- if DBSG.cells[scrFormat,cur_row] <> ''
- then TableToDefine.findField(whichfield).EditMask
- := DBSG.cells[scrFormat,cur_row];
-
-
- {,,, rest of field def}
- end;
- end;
- end;
-
-
-
-
-
- function TdictCtrlForm.FillTableDef(qry : tquery; tbl : string): tBuildresulttype;
- var
- tmpstr : string;
- tablefound : boolean;
- tablenum,
- cur_row : integer;
- dbstrgrd : tstringGrid;
- begin
- try
- qry.close;
- qry.sql.clear;
- qry.params.clear;
- tmpstr := 'SELECT * FROM '+tbl;
- qry.sql.add(tmpstr);
- qry.prepare;
- qry.open;
- qry.first;
- { get tablenames in data dictionary, create Ptabledefs linked list}
- if qry.findfield('TABLE_NAME') = nil
- then begin
- cursor := crDefault;
- MessageDlg('not a Data Dictionary Database.', mtInformation, [mbOK], 0);
- result := NotvalidDD;
- exit;
- end;
- tableList := tstringlist.create;
- tableList.add(qry.findfield('TABLE_NAME').text); {get first one}
- qry.next;
- while not qry.eof do begin
- tablefound := false;
- tmpstr := qry.findfield('TABLE_NAME').text;
- for tablenum := 0 to tableList.count - 1 do
- if TableList.strings[tablenum] = tmpstr
- then begin tablefound := true; break; end;
- {done looking for table name}
- if not tablefound
- then TableList.add(tmpstr);
- qry.next;
- end; {while searching for table names}
- {now fill in the fields for each table}
- qry.close;
- qry.sql.clear;
- qry.params.clear;
- tmpstr := 'SELECT * FROM '+tbl+' where TABLE_NAME = :tableid';
- qry.sql.add(tmpstr);
- qry.prepare;
- cur_row := 0;
- for tablenum := 0 to TableList.count - 1 do begin
- qry.close;
- qry.ParamByName('tableid').asString := tableList.strings[tablenum];
- qry.open;
- qry.first;
- while not qry.eof do begin
- DBSG.cells[tablename,cur_row] := qry.findfield('TABLE_NAME').text;
- DBSG.cells[fieldname,cur_row] := qry.findfield('FIELD_NAME').text;
- DBSG.cells[tag,cur_row] := qry.findfield('TAG').text;
- DBSG.cells[scrprompt,cur_row] := qry.findfield('SCR_PROMPT').text;
- DBSG.cells[scrformat,cur_row] := qry.findfield('SCR_FMT').text;
- DBSG.cells[grdprompt,cur_row] := qry.findfield('GRD_PROMPT').text;
- DBSG.cells[grdwidth,cur_row] := qry.findfield('GRD_WIDTH').asString;
- DBSG.cells[fldtype ,cur_row] := qry.findfield('FIELD_TYPE').text;
- DBSG.cells[fldlen ,cur_row] := qry.findfield('FIELD_LEN').asString;
- DBSG.cells[flddec ,cur_row] := qry.findfield('FIELD_DEC').asString;
- DBSG.cells[fldidx ,cur_row] := qry.findfield('FIELD_IDX').asString;
- DBSG.cells[idxexp ,cur_row] := qry.findfield('IDX_EXPRES').text; {first line only}
- DBSG.cells[tab_order ,cur_row] := qry.findfield('TAB_ORDER').asString;
- DBSG.cells[isrequired ,cur_row] := qry.findfield('REQUIRED').asString;
- DBSG.cells[defaultis ,cur_row] := qry.findfield('DEFAULT').text;
- DBSG.cells[editmaskis ,cur_row] := qry.findfield('EDITMASK').text;
- DBSG.cells[minval ,cur_row] := qry.findfield('MINVAL').asString;
- DBSG.cells[maxval ,cur_row] := qry.findfield('MAXVAL').asString;
- DBSG.cells[vallist ,cur_row] := qry.findfield('VALLIST').text; {first line only}
- DBSG.cells[hinttxt ,cur_row] := qry.findfield('HINT').text;
- DBSG.cells[helpid ,cur_row] := qry.findfield('HELPID').asSTring;
- DBSG.cells[haslink ,cur_row] := qry.findfield('HASLINK').asSTring;
- DBSG.cells[srclinktbl ,cur_row] := qry.findfield('SRCLINKTBL').text;
- DBSG.cells[srclinkfld ,cur_row] := qry.findfield('SRCLINKFLD').text;
- DBSG.cells[iscalc ,cur_row] := qry.findfield('IS_CALC').asString;
- DBSG.cells[formula ,cur_row] := qry.findfield('FORMULA').text;
-
- DBSG.rowCount := cur_row+1;
- inc(cur_row);
- qry.next;
- end;
- end;
- result := success;
- except
- on EdataBaseError do begin
- cursor := crDefault;
- MessageDlg('Not a data base file or other DB error', mtInformation, [mbOK], 0);
- result := DBerror;
- end;
- end; {of exceptions}
-
- end;
- (***
- fieldname = 1; { string[20];}
- scrprompt = 2; { string[20]; {tfield.DisplayName}
- scrformat = 3; {string[20]; {tfield.DisplayText -- an editmask}
- grdprompt = 4; {string[10];}
- grdwidth = 5; {integer; {tfield.DisplayWidth}
- fldtype = 6; {string[1]; {FieldTypeLtr}
- fldlen = 7; {integer; {tfield.size}
- flddec = 8; {integer;}
- fldidx = 9; {boolean;}
- idxexp = 10; {string;}
- taborder = 11; {integer;}
- required = 12; {boolean; {tfield.required}
- default = 13; {string[80];}
- editmask = 14; {string[80]; {tfield.editMask}
- validvalue = 15; {string;
- {for numerics= minvalue, maxvalue}
- {for strings= comma delimited list}
- hint = 16; {string;}
- helpid = 17; {longint;}
- haslink = 18; {boolean;}
- srclinktbl = 19; {string[20];}
- srclinkfld = 20; {string[20];}
- iscalc = 21; {boolean;}
-
- PFieldDef = ^FieldDefRecType;
- FieldDefRecType = record
- fieldname : string[20];
- scrprompt : string[20]; {tfield.DisplayName}
- scrformat : string[20]; {tfield.DisplayText -- an editmask}
- grdprompt : string[10];
- grdwidth : integer; {tfield.DisplayWidth}
- fldtype : string[1]; {FieldTypeLtr}
- fldlen : integer; {tfield.size}
- flddec : integer;
- fldidx : boolean;
- idxexp : string;
- taborder : integer;
- required : boolean; {tfield.required}
- default : string[80];
- editmask : string[80]; {tfield.editMask}
- validvalue : pchar;
- {for numerics: minvalue, maxvalue}
- {for strings: comma delimited list}
- hint : string;
- helpid : longint;
- haslink : boolean;
- srclinktbl : string[20];
- srclinkfld : string[20];
- iscalc : boolean;
- next, prev : pFieldDef;
- end;
-
- PtableDef = ^TableDefRecType;
- TableDefRecType = record
- tablename : string[20];
- fieldDefs : PFieldDef;
- next, prev : PTableDef;
- end;
-
-
- ***)
-
- end.
-
-